var DateControl = (function(){
		var target = "#";
		
		return {
			createDatePicker: function(domtarget,defDate,yearRangeMode){
				var that = this;
				target = domtarget;
				$(target).datepicker({
					changeMonth: true,
					changeYear: true,
					dateFormat :"dd-mm-yy",
					defaultDate: defDate,
					onBeforeShow: function(){
						$(target).DatePickerSetDate($(target).val(), true);
					},
					showOn: 'focus',
					yearRange: 'c-90:c+90'
				});
				
				$("#ui-datepicker-div").css("display","none");
				
				if (yearRangeMode && yearRangeMode=="Progressive"){
					this.setProgressiveYearRange();
				}else{
					if (yearRangeMode){
						this.setRegressiveYearRange();
					}
				}
			},
			setRegressiveYearRange: function(){
				$(target).datepicker( "option", "maxDate", '+1y');
				$(target).datepicker( "option", "minDate", '-90y');
			},
			setProgressiveYearRange: function(){
				$(target).datepicker( "option", "maxDate", '+90y');
				$(target).datepicker( "option", "minDate", '-1y');
			},
			dateToArray : function(aDate){
				
				var date_parts = aDate.split("-"); //calculo la fecha de inicio que recibo (podria ser de nacimiento) y La descompongo en un array
			   	if (date_parts.length!=3) return false; //si el array no tiene tres partes, la fecha es incorrecta
			   	
			   	//compruebo que los años, mes, dia son correctos 
			   	var year = parseInt(date_parts[2]); 
			   	if (isNaN(year)) return false; 

			   	var month = parseInt(date_parts[1]); 
			   	if (isNaN(month)) return false; 

			   	var day = parseInt(date_parts[0]);	
			   	if (isNaN(day)) return false;
			   	
			   	var converted = [];
			   	converted["day"] = day;
			   	converted["month"] = month;
			   	converted["year"] = year;
			   	return converted;
			   	
			},
			datediff: function(startDate, endDate){
				
				startDateParts = this.dateToArray(startDate); 
				if (!startDateParts) return false;
				
			   	//resto los años de las dos fechas 
			   	var year_diff = 0;
			   	
			   	if (endDate instanceof Date){
			   		year_diff = endDate.getFullYear() - startDateParts["year"] - 1; //-1 porque no se si ha cumplido años ya este año; 1900 porque getYear devuelve un entero (offset de 1900)
			   		
			   		//si resto los meses y me da menor que 0 entonces no ha cumplido años. Si da mayor si ha cumplido 
				   	if (endDate.getMonth() + 1 - startDateParts["month"] < 0) return year_diff; //+ 1 porque los meses empiezan en 0 
				    if (endDate.getMonth() + 1 - startDateParts["month"] > 0) return year_diff + 1;
				    
				    //entonces es que eran iguales. miro los dias 
				   	//si resto los dias y me da menor que 0 entonces no ha cumplido años. Si da mayor o igual si ha cumplido 
				   	if (endDate.getUTCDate() - startDateParts["day"] >= 0) return year_diff + 1;
			   	}else{
			   		var endDateParts = this.dateToArray(endDate);
			   		if (!endDateParts) return false;
				   	
			   		year_diff = endDateParts["year"] - startDateParts["year"] - 1; //-1 porque no se si ha cumplido años ya este año; 1900 porque getYear devuelve un entero (offset de 1900)
			   		
			   		//si resto los meses y me da menor que 0 entonces no ha cumplido años. Si da mayor si ha cumplido 
				   	if (endDateParts["month"] + 1 - startDateParts["month"] < 0) return year_diff; //+ 1 porque los meses empiezan en 0 
				    if (endDateParts["month"] + 1 - startDateParts["month"] > 0) return year_diff + 1;
				    
				    //entonces es que eran iguales. miro los dias 
				   	//si resto los dias y me da menor que 0 entonces no ha cumplido años. Si da mayor o igual si ha cumplido 
				   	if (endDateParts["day"] - startDateParts["day"] >= 0) return year_diff + 1;
				}
			   	
			   	return year_diff;
			   	
			},
			determineAge : function(birthdate){
				return this.datediff(birthdate, new Date()); //new Date representa el dia-mes-año actual
			},
			determineBirthdate: function(age){
				var today = new Date();
				return "01-01-" + (today.getFullYear() - age) ;
			}
		};
}());

